<?php

namespace App\Http\Controllers\Web\Oauth;

use App\Services\Oauth\Oauth2\Login;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use App\Http\Controllers\Web\Oauth\Controller;
use App\Services\Base\UserService;
use App\Http\Resources\Base\UserResource;
use App\Core\Utils\TwHelper\Environment;
use App\Models\Oauth\UserModel;

/**
 * 用户登录注册等相关操作
 */
class IndexController extends Controller
{

    /**
     * 登录
     *
     * @param Request $request
     * @return \Illuminate\Routing\Redirector
     */
    public function login(Request $request)
    {
        //oauth2.0 登录的参数key
        $oauthParamsKey = $this->identity()->makeCacheKey('authParamsCache');
        //获取oauth2.0授权请求参数(app_key、redirect_uri、response_type、scope、state)5个
        $appKey = $request->query('app_key');
        if ($appKey) {
            $oauthParams = array(
                "app_key" => $appKey,
                "redirect_uri" => urldecode($request->query('redirect_uri', '')),
                "response_type" => $request->query('response_type', ''),
                "scope" => $request->query('scope', 'basic'),
                "state" => $request->query('state', '')
            );
            //缓存这些参数
            session()->put($oauthParamsKey, $oauthParams);
        }

        //检测是否已经登录
        //已经登录
        if ($this->identity()->checkUser()) {
            $oauthParams = session()->get($oauthParamsKey);
            if (empty($oauthParams)) {
                $redirect_uri = $request->query('redirect_uri', '');

                //判断是否设置用户类型
                $use = $this->identity();
                if (!$use->isSetUserType($use->getUserId())) {
                    //  未设置用户类型，跳转到设置界面,设置成功后，直接跳转到redirect_uri页面
                    return redirect()->route('oauth.usertype', array('redirect_uri' => $redirect_uri));
                }

                //无Oauth相关参数，直接跳到访问前的页面，
                if ($redirect_uri) {
                    echo "<meta http-equiv=refresh content='0; url=$redirect_uri'>";
                    exit();
                }
                // redirect 页面跳转
                return redirect()->route('oauth.index');
                //也可以跳转到首页
                //return redirect()->route('portalIndex');
            }


            //实现Oauth2.0服务器回应客户端授权请求
            //实例化登录对象
            $login = new Login($oauthParams['app_key']);
            //进行oauth2请求授权参数验证（5个参数）
            $login->checkParams($oauthParams);
            //清空当前请求授权参数的缓存信息
            session()->forget($oauthParamsKey);
            //登录成功后，跳转到子应用的回调地址（关键）
            $login->callBack();

        }

        //跳转到登录的页面
        if (Environment::isMobile()) {
            //跳转到手机登录页面
            return view('oauth-mobile.login');
        }
        //跳转到pc登录页面
        return view('oauth.login');
    }

    /**
     * 注册
     * 注册成功后需跳转到设置用户类型页面
     */
    public function regist()
    {
        //跳转到注册页面
        if (Environment::isMobile()) {
            //跳转到手机注册页面
            return view('oauth-mobile.register');
        }
        return view('oauth.register');
    }

    /**
     * 退出
     *
     * @param Request $request
     * @return \Illuminate\Routing\Redirector
     */
    public function logout(Request $request)
    {
        //获取 redirect 跳转链接
        $redirect_uri = $request->query('redirect_uri');
        // 删除 session 内用户数据
        $this->identity()->loginOut();
        if ($redirect_uri) {
            //页面跳转到客户的回调页面
            echo "<meta http-equiv=refresh content='0; url=$redirect_uri'>";
            exit();
        }
//        return redirect()->route('');
    }

    /**
     * 找回密码
     */
    public function getbackpassword()
    {
        //跳转到找回密码页面
        if (Environment::isMobile()) {
            //跳转到手机找回密码页面
            return view('oauth-mobile.getbackpassword');
        }
        return view('oauth.getbackpassword');
    }

    /**
     * 获取验证码
     */
    public function numCode()
    {
        //return captcha();
        //前端可以直接使用下面的代码，点击后刷新
        // <img src="{{captcha_src()}}" onclick="this.src='/captcha/default?'+Math.random()" alt="验证码">
        return captcha_src('default');
    }


}